package com.proyecto.personas.modelo.validacion.proyecto;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.interfaces.IServicioTransaccion;
import com.proyecto.core.modelo.validacion.IValidacionServicio;
import com.proyecto.personas.modelo.dto.TelefonoCorreo;
import com.proyecto.personas.modelo.dto.TelefonoCorreoId;
import com.proyecto.personas.modelo.dto.TelefonoTipoId;

public class ValidacionServicioTelefonoCorreo implements IValidacionServicio {
	IServicioTransaccion servicioTelefonoTipoTarget;
	
	public void buscarCatalogoPorPropiedad(String atributo, String valor)
		throws GeneralException {
			if (atributo == null || valor == null || atributo.equals("")
					|| valor.equals("")) {
				throw new GeneralException(
					"error.persona.datosBasicos.telefonoCorreo.buscarCatalogoXPropiedad.parametrosInvalidos");
}

}

	public void consultar(Object o) throws GeneralException {

		TelefonoCorreoId objTelefonoCorreo = (TelefonoCorreoId) o;
		if (o == null || objTelefonoCorreo.getCiaopr() == null
				|| objTelefonoCorreo.getCiaopr().trim().equals("")
				//|| objTelefonoCorreo.getTelefonocodigoarea() == null
				//|| objTelefonoCorreo.getTelefonocodigoarea().trim().equals("")
				|| objTelefonoCorreo.getTelefononumero() == null
				|| objTelefonoCorreo.getTelefononumero().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.telefonoCorreo.consulta.pkNull");
		}
	}

	public void consultarTodos(Object o) throws GeneralException {
		if (o == null) {
			throw new GeneralException(
					"error.persona.datosBasicos.telefonoCorreo.consulta.pkNull");
		}
	}

	public void eliminar(Object o) throws GeneralException {
		TelefonoCorreo objTelefonoCorreo = (TelefonoCorreo) o;
		if (objTelefonoCorreo == null || objTelefonoCorreo.getId().getCiaopr() == null
				|| objTelefonoCorreo.getId().getCiaopr().trim().equals("")
				//|| objTelefonoCorreo.getId().getTelefonocodigoarea() == null
				//|| objTelefonoCorreo.getId().getTelefonocodigoarea().trim().equals("")
				|| objTelefonoCorreo.getId().getTelefononumero() == null
				|| objTelefonoCorreo.getId().getTelefononumero().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.telefonoCorreo.eliminar.pkNull");
		}
	}

	public void incluir(Object o) throws GeneralException {
		TelefonoCorreo objTelefonoCorreo = (TelefonoCorreo) o;
		if (objTelefonoCorreo == null || objTelefonoCorreo.getId().getCiaopr() == null
				|| objTelefonoCorreo.getId().getCiaopr().trim().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.telefonoCorreo.incluir.pkNull");
		}
		this.validaCampos(objTelefonoCorreo);
	}

	public void modificar(Object o) throws GeneralException {
		TelefonoCorreo objTelefonoCorreo = (TelefonoCorreo) o;
		if (objTelefonoCorreo == null || objTelefonoCorreo.getId().getCiaopr() == null
				|| objTelefonoCorreo.getId().getCiaopr().trim().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.telefonoCorreo.modificar.pkNull");
		} 
		this.validaCampos(objTelefonoCorreo);
	}
	

	private void validaCampos(TelefonoCorreo objTelefonoCorreo) throws GeneralException{
		//Validamos campos requeridos
		System.out.println("Estoy validando los campos");
		String campos = "";
	// TODO: cambiar estos campos de la lectura de un properties
		
		if (objTelefonoCorreo.getId().getTelefonotipcod()== null
				|| "".equals(objTelefonoCorreo.getId().getTelefonotipcod())){
				campos = campos + "Telefonos.Tipo;";
				}
		if (objTelefonoCorreo.getId().getTelefonocodigopais()== null
				|| "".equals(objTelefonoCorreo.getId().getTelefonocodigopais())){
				campos = campos + "Telefonos.CodPais;";
				}
		/*
		if (objTelefonoCorreo.getId().getTelefonocodigoarea()== null
				|| "".equals(objTelefonoCorreo.getId().getTelefonocodigoarea())){
				campos = campos + "Telefonos.CodArea;";
				}
		*/
		if (objTelefonoCorreo.getId().getTelefononumero()== null
				|| "".equals(objTelefonoCorreo.getId().getTelefononumero())){
					campos = campos + "Telefonos.NroTelefono";
		}
		System.err.println(campos);
		if (!"".equals(campos)){
			throw new GeneralException("error.persona.datosBasicos.telefonoCorreo.campos_obligatorios",campos);
		}

		if (objTelefonoCorreo.getId().getTelefonotipcod() != null) {
			servicioTelefonoTipoTarget.consultar(new TelefonoTipoId(objTelefonoCorreo.getId().getCiaopr(),objTelefonoCorreo.getId().getTelefonotipcod()));
		}
		
		if (objTelefonoCorreo.getId().getTelefononumero()== null
				|| "".equals(objTelefonoCorreo.getId().getTelefononumero())){
			
		}else{
			String sNroTelefonico = objTelefonoCorreo.getId().getTelefononumero();
			System.out.println("sNroTelefonico: " + sNroTelefonico );
			Integer cantidadCaracteres = sNroTelefonico.length();
			
			if(cantidadCaracteres < 7 || cantidadCaracteres > 10 ){
				campos = campos + "Telefonos.NroTelefono";
				throw new GeneralException("error.persona.datosBasicos.telefonoCorreo.telefonoNumero.CantidadCaracteresIncorrecto",campos);
			}
			
			try {
				Long lNroTelefonico = Long.parseLong( sNroTelefonico );
				System.out.println("lNroTelefonico.Long: " + lNroTelefonico );
			} catch (Exception e) {
				// TODO: handle exception
				campos = campos + "Telefonos.NroTelefono";
				throw new GeneralException("error.persona.datosBasicos.telefonoCorreo.telefonoNumero.NumerosIncorrecto",campos);
			}
			

			
			/*
			//Integer iNroTelefonico = objTelefonoCorreo.getId().getTelefononumero().intValue();
			Double dNroTelefonico = objTelefonoCorreo.getId().getTelefononumero();
			String sNroTelefonico = objTelefonoCorreo.getId().getTelefononumero().toString();
			System.out.println("dNroTelefonico: " + dNroTelefonico);
			System.out.println("sNroTelefonico: " + sNroTelefonico);
			Integer cantidadCaracteres = sNroTelefonico.length();

			System.out.println("cantidadCaracteres: " + cantidadCaracteres);
			if(cantidadCaracteres < 7 || cantidadCaracteres > 10 ){
				campos = campos + "Telefonos.NroTelefono";
				throw new GeneralException("error.persona.datosBasicos.telefonoCorreo.telefonoNumero.CantidadCaracteresIncorrecto",campos);
			}*/
		}
	}

	public IServicioTransaccion getServicioTelefonoTipoTarget() {
		return servicioTelefonoTipoTarget;
	}

	public void setServicioTelefonoTipoTarget(
			IServicioTransaccion servicioTelefonoTipoTarget) {
		this.servicioTelefonoTipoTarget = servicioTelefonoTipoTarget;
	}

}
